﻿using System;
using System.Data;
using System.Collections.Generic;

namespace GUI.BR
{
    using EXT;
    using DAL.Entities;
    using BLL;
    using System.Windows.Forms;
    using DevExpress.Utils;
    public partial class frmNhaphang : DevExpress.XtraEditors.XtraForm
    {
        public frmNhaphang()
        {
            InitializeComponent();
        }

        private void frmNhaphang_Load(object sender, EventArgs e)
        {
            WaitDialogForm wdf = new WaitDialogForm("Đang load dữ liệu...", "Xin chờ trong giây lát.");
            Load_NCC("2");
            Load_Kho();
            Load_Nhanvien();
            dtpTungay.EditValue = GUI.SDN.LayNgaydauthang();
            dtpDenngay.EditValue = DateTime.Now;
            Load_PhieunhapParameter(dtpTungay.DateTime, dtpDenngay.DateTime);
            Load_Hanghoa_ForView();
            TaoTable();
            btnPhieunhapmoi_Click(null, null);
            wdf.Close();
        }

        PhieunhapBLL Phieunhap_BLL = new PhieunhapBLL();
        PhieunhapParameterBLL PhieunhapParameter_BLL = new PhieunhapParameterBLL();
        HanghoaBLL Hanghoa_BLL = new HanghoaBLL();
        ChitietPhieunhapBLL ChitietPhieunhap_BLL = new ChitietPhieunhapBLL();


        /// <summary>
        /// Lấy thông tin nhà cung cấp cho tạo phiếu nhập với tìm các lần nhập của nhà cung cấp
        /// </summary>
        /// <param name="x">x=0 chỉ load cho tìm, x=1 chỉ load cho thêm, x=2 load cả 2</param>
        private void Load_NCC(string x)
        {
            NCCBLL NCC_BLL = new NCCBLL();
            var dt = NCC_BLL.NCC_Select_All_Vali_ForView();
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    if (x == "0")
                    {
                        gleNCC.Properties.DataSource = dt;
                    }
                    else if (x == "1")
                    {
                        gleNCC0.Properties.DataSource = dt;
                    }
                    else
                    {
                        gleNCC0.Properties.DataSource = dt;
                        gleNCC.Properties.DataSource = dt;
                    }
                }
            }
        }

        /// <summary>
        /// Lấy thông tin nhân viên nhập hàng về
        /// Chú ý là nhận viên nhập hàng về khác nhân viên lập phiếu này
        /// </summary>
        private void Load_Nhanvien()
        {
            NhanvienBLL Nhanvien_BLL = new NhanvienBLL();
            var dt = Nhanvien_BLL.Nhanvien_Select_All_ForView();
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    lokNhanvien.Properties.DataSource = dt;
                }
            }
        }

        /// <summary>
        /// Lấy thông tin kho
        /// </summary>
        private void Load_Kho()
        {
            DanhmucBLL Danhmuc_BLL = new DanhmucBLL();
            var dt = Danhmuc_BLL.Danhmuc_Select_By_Kind_All("Kho");
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    lokKho.Properties.DataSource = dt;
                }
            }
        }

        /// <summary>
        /// Load những phiếu nhập từ ngày đến ngày
        /// </summary>
        /// <param name="Tungay">Từ ngày</param>
        /// <param name="Denngay">Đến ngày</param>
        private void Load_PhieunhapParameter(DateTime Tungay, DateTime Denngay)
        {
            var dt = PhieunhapParameter_BLL.PhieunhapParameter_Select_TungayDenngay(new PhieunhapParameter() { Tungay = Tungay, Denngay = Denngay });
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    gcDanhsach.DataSource = dt;
                }
                else gcDanhsach.DataSource = null;
            }
        }

        private void Load_PhieunhapParameter(DateTime Tungay, DateTime Denngay, Guid Id_NCC)
        {
            var dt = PhieunhapParameter_BLL.PhieunhapParameter_Select_TungayDenngayNCC(new PhieunhapParameter() { Tungay = Tungay, Denngay = Denngay, Id_NCC_Khach = Id_NCC });
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    gcDanhsach.DataSource = dt;
                }
                else gcDanhsach.DataSource = null;
            }
        }

        private void Load_Hanghoa_ForView()
        {
            Hanghoa_BLL.Hanghoa_Select_All_Vali_ForView();
            //if (dt != null)
            //{
            //  //  if (dt.Rows.Count > 0)
            //    {
            //        gleHanghoa.Properties.DataSource = dt;

            //    }
            //}
        }

        private void Load_Dvt(Guid Id_Hanghoa)
        {
            var dt = Hanghoa_BLL.Hanghoa_Select_By_Id_Hanghoa(Id_Hanghoa);
            DataTable dvt = new DataTable();
            DataColumn dc1 = new DataColumn("Id_Dvt", typeof(Guid));
            DataColumn dc2 = new DataColumn("TenDvt", typeof(string));
            DataColumn dc3 = new DataColumn("Doi", typeof(float));
            dvt.Columns.Add(dc1);
            dvt.Columns.Add(dc2);
            dvt.Columns.Add(dc3);
            dvt.Rows.Add(dt.Rows[0]["Id_Dvt0"].GetGuid(), dt.Rows[0]["TenDvt0"].ToString(), 1);
            if (dt.Rows[0]["Id_Dvt1"].GetGuid() != Guid.Empty)
            {
                dvt.Rows.Add(dt.Rows[0]["Id_Dvt1"].GetGuid(), dt.Rows[0]["TenDvt1"].ToString(), (float)dt.Rows[0]["Doi1"].ToDecimal());
            }
            if (dt.Rows[0]["Id_Dvt2"].GetGuid() != Guid.Empty)
            {
                dvt.Rows.Add(dt.Rows[0]["Id_Dvt2"].GetGuid(), dt.Rows[0]["TenDvt2"].ToString(), (float)dt.Rows[0]["Doi2"].ToDecimal());
            }
            gleDvt.Properties.DataSource = dvt;
        }

        private void Load_ThongtinCaPhieunhap(Guid Id)
        {
            ReadOnlyControl(true);
            var dt1 = Phieunhap_BLL.PhieunhapLayThongtin1(Id);
            if (dt1.Rows.Count > 0)
            {
                dtpNgay.EditValue = dt1.Rows[0]["Ngay"].ToDateTime();
                txtMa.EditValue = dt1.Rows[0]["Ma"].ToString();
                lokNhanvien.EditValue = dt1.Rows[0]["Id_NhanvienNhap"].GetGuid();
                txtNhanvienLap.EditValue = "NV lập phiếu: " + dt1.Rows[0]["NhanvienLap"].ToString();
                lokKho.EditValue = dt1.Rows[0]["Id_Kho"].GetGuid();
                gleNCC.EditValue = dt1.Rows[0]["Id_NCC"].GetGuid();
                txtNocu.EditValue = dt1.Rows[0]["Nocu"].ToInt32();
                txtGhichu.EditValue = dt1.Rows[0]["Ghichu"].ToString();
                txtTongtien.EditValue = dt1.Rows[0]["Tongtien"].ToInt32();
                txtDatra.EditValue = dt1.Rows[0]["Datra"].ToInt32();
                txtConno.EditValue = dt1.Rows[0]["Conno"].ToInt32();
                txtTrangthaiphieu.EditValue = dt1.Rows[0]["Ten"].ToString();
            }
        }

        private void Load_ChitietPhieunhap(Guid Id)
        {
            var dt2 = ChitietPhieunhap_BLL.ChitietPhieunhap_Select(Id);
            if (dt2.Rows.Count > 0)
            {
                gcChitietPhieunhap.DataSource = dt2;
            }
            else
                gcChitietPhieunhap.DataSource = null;
        }

        private void Phieunhap_Select_ChitietThongtinPhieunhap(Guid Id_Phieunhap)
        {
            DataTable dt = Phieunhap_BLL.PhieunhapLayThongtin1(Id_Phieunhap);
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    dtpNgay.EditValue = dt.Rows[0]["Ngay"].ToDateTime();
                    txtMa.EditValue = dt.Rows[0]["Ma"].ToString();
                    lokNhanvien.EditValue = dt.Rows[0]["Id_NhanvienNhap"].GetGuid();
                    txtNhanvienLap.EditValue = "NV lập phiếu: " + dt.Rows[0]["NhanvienLap"].GetGuid();
                    lokKho.EditValue = dt.Rows[0]["Id_Kho"].GetGuid();
                    gleNCC.EditValue = dt.Rows[0]["Id_NCC"].GetGuid();
                    txtDiachi.EditValue = dt.Rows[0]["Diachi"].ToString();
                    txtGhichu.EditValue = dt.Rows[0]["Ghichu"].ToString();
                    txtDienthoai.EditValue = dt.Rows[0]["Dienthoai"].ToString();
                    lblTenNhanvienLap.Text = dt.Rows[0]["TenNhanvienLap"].ToString();
                    txtTongtien.EditValue = dt.Rows[0]["Tongtien"].ToDateTime();
                    txtTongtienchu.EditValue = dt.Rows[0]["Tongtien"].ToString().ToVietnamese().ToUpperFirst();
                    txtDatra.EditValue = dt.Rows[0]["Datra"].ToInt32();
                    txtConno.EditValue = dt.Rows[0]["Conno"].ToInt32();
                    txtTrangthaiphieu.EditValue = dt.Rows[0]["TenTranghthaiphieu"].ToString();
                }
            }
        }

        private void ResetInput()
        {
            dtChitietPhieunhap.Clear();
            txtNocu.EditValue = null;
            dtpNgay.EditValue = DateTime.Now;
            txtMa.EditValue = "Phiếu nhập mới...";
            lokNhanvien.EditValue = null;
            txtNhanvienLap.EditValue = null;
            lokKho.EditValue = null;
            gleNCC.EditValue = null;
            txtDiachi.EditValue = null;
            txtDienthoai.EditValue = null;
            txtGhichu.EditValue = null;
            txtTongtien.EditValue = null;
            txtTongtienchu.EditValue = null;
            txtDatra.EditValue = null;
            txtConno.EditValue = null;
            txtTrangthaiphieu.EditValue = "Chưa lưu...";
            lblTenNhanvienLap.Text = "Người lập: " + MAIN.Ten;
            gcChitietPhieunhap.DataSource = null;
            gleNCC.Focus();
        }

        private void ResetInputHanghoa()
        {
            gleHanghoa.EditValue = null;
            gleDvt.EditValue = null;
            txtSoluong.EditValue = null;
            txtGianhap.EditValue = null;
            txtCK.EditValue = null;
            txtThanhtien.EditValue = null;
        }

        private void ReadOnlyControl(bool isReadOnly)
        {
            btnLuu.Enabled = !isReadOnly;
            btnTratien.Enabled = isReadOnly;
            dtpNgay.Properties.ReadOnly = isReadOnly;
            lokNhanvien.Properties.ReadOnly = isReadOnly;
            lokKho.Properties.ReadOnly = isReadOnly;
            gleNCC.Properties.ReadOnly = isReadOnly;
        }

        private void EnabledControlHanghoa(bool isReadOnly)
        {
            gleHanghoa.Enabled = isReadOnly;
            gleDvt.Enabled = isReadOnly;
            txtSoluong.Enabled = isReadOnly;
            txtGianhap.Enabled = isReadOnly;
            txtCK.Enabled = isReadOnly;
            txtThanhtien.Enabled = isReadOnly;

            colSoluong.OptionsColumn.AllowEdit = isReadOnly;
            colGianhap.OptionsColumn.AllowEdit = isReadOnly;
            colCK.OptionsColumn.AllowEdit = isReadOnly;

            btnThaidoiSoluong.Enabled = !isReadOnly;
        }


        public bool KiemtraThemChitiet()
        {
            if (gleHanghoa.EditValue == null)
            {
                MsgC.MsgWarning("Chưa chọn hàng hóa");
                gleHanghoa.Focus();
                return false;
            }
            if (gleDvt.EditValue == null)
            {
                MsgC.MsgWarning("Chưa chọn đơn vị tính");
                gleDvt.Focus();
                return false;
            }
            if (txtSoluong.EditValue.ToDouble() <= 0)
            {
                MsgC.MsgWarning("Chưa nhập số lượng");
                txtSoluong.Focus();
                return false;
            }
            if (txtGianhap.Text.Replace(".", "").Replace(",", "").Trim().ToInt32() <= 0)
            {
                MsgC.MsgWarning("Chưa nhập đúng giá nhập");
                txtGianhap.Focus();
                return false;
            }
            if (txtCK.EditValue.ToInt32() >= 100)
            {
                MsgC.MsgWarning("Chiết khấu không được quá 100%");
                txtCK.Focus();
                return false;
            }
            return true;
        }

        DataTable dtChitietPhieunhap = new DataTable();

        private void TaoTable()
        {
            DataColumn Id_Hanghoa = new DataColumn("Id_Hanghoa", typeof(Guid));
            DataColumn TenMa = new DataColumn("MaTen", typeof(string));
            DataColumn Id_Dvt = new DataColumn("Id_Dvt", typeof(Guid));
            DataColumn TenDvt = new DataColumn("TenDvt", typeof(string));
            DataColumn Soluong = new DataColumn("Soluong", typeof(float));
            DataColumn Gianhap = new DataColumn("Gianhap", typeof(int));
            DataColumn Ck = new DataColumn("Ck", typeof(int));
            DataColumn Thanhtien = new DataColumn("Thanhtien", typeof(int));
            DataColumn E = new DataColumn("E", typeof(bool));
            DataColumn Doi = new DataColumn("Doi", typeof(float));
            dtChitietPhieunhap.Columns.Add(Id_Hanghoa);
            dtChitietPhieunhap.Columns.Add(TenMa);
            dtChitietPhieunhap.Columns.Add(Id_Dvt);
            dtChitietPhieunhap.Columns.Add(TenDvt);
            dtChitietPhieunhap.Columns.Add(Soluong);
            dtChitietPhieunhap.Columns.Add(Gianhap);
            dtChitietPhieunhap.Columns.Add(Ck);
            dtChitietPhieunhap.Columns.Add(Thanhtien);
            dtChitietPhieunhap.Columns.Add(E);
            dtChitietPhieunhap.Columns.Add(Doi);
        }

        private void ThemvaodtChitietPhieunhap()
        {
            decimal Thanhtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
            Thanhtien -= (Thanhtien / 100) * txtCK.EditValue.ToInt32();
            try
            {
                Guid Id_Hanghoa = gleHanghoa.EditValue.GetGuid();
                string MaTen = gleHanghoa.Text;
                Guid Id_Dvt = gleDvt.EditValue.GetGuid();
                string TenDvt = gvDvt.GetFocusedRowCellValue("TenDvt").ToString();
                float Soluong = (float)txtSoluong.EditValue.ToDecimal();
                int Gianhap = txtGianhap.Text.Replace(".", "").Replace(",", "").Trim().ToInt32();
                int Ck = txtCK.EditValue.ToInt32();
                bool E = true;
                float Doi = (float)gvDvt.GetFocusedRowCellValue("Doi").ToDecimal();
                dtChitietPhieunhap.Rows.Add(
                    Id_Hanghoa, MaTen, Id_Dvt, TenDvt, Soluong, Gianhap, Ck, Thanhtien, E, Doi
                );
                gcChitietPhieunhap.DataSource = dtChitietPhieunhap;
                TinhTongtienPhieunhap();
                gleHanghoa.EditValue = null;
            }
            catch (Exception)
            {
                MsgC.MsgWarning("Thêm hàng hóa vào phiếu nhập không thành công\n\nVui lòng kiểm tra lại thông tin");
                gleHanghoa.Focus();
            }
        }

        private int TinhTongtienPhieunhap()
        {

            DataTable dt = (DataTable)gcChitietPhieunhap.DataSource;
            int CountRow = dt.Rows.Count;//dtChitietPhieunhap.Rows.Count;
            int Tongtien = 0;
            for (int i = 0; i < CountRow; i++)
            {
                Tongtien = Tongtien;
                try
                {
                    Tongtien += dt.Rows[i]["Thanhtien"].ToInt32();
                }
                catch (Exception)
                {
                }
            }
            txtTongtien.EditValue = Tongtien;
            gvChitietPhieunhap.FocusedRowHandle = CountRow - 1;
            return Tongtien;
        }

        private void btnPhieunhapmoi_Click(object sender, EventArgs e)
        {
            ReadOnlyControl(false);
            EnabledControlHanghoa(true);
            ResetInput();
        }

        private void btnThemNCC_Click(object sender, EventArgs e)
        {
            var frm = new GUI.BR.frmNCC(true);
            frm.MyEvent_LoadData_Chitiet += new MyEvent_LoadData(frm_MyEvent_LoadData_Chitiet);
            frm.ShowDialog();
        }

        void frm_MyEvent_LoadData_Chitiet(object sender, ELoadData e)
        {
            Load_NCC("0");
        }

        private void gleNCC_EditValueChanged(object sender, EventArgs e)
        {
            if (gleNCC.EditValue != null && gleNCC.Text != "")
            {
                DataTable dt = (DataTable)gleNCC.Properties.DataSource;
                DataRow[] x = dt.Select(String.Format("Id ='{0}'", gleNCC.EditValue));
                txtDiachi.EditValue = x[0].ItemArray[2].ToString();
                txtDienthoai.EditValue = x[0].ItemArray[3].ToString();
                var dtNocu = Phieunhap_BLL.Phieunhap_NCC_Select_Conno_By_Id_NCCNgay(new Phieunhap() { Id_NCC = gleNCC.EditValue.GetGuid(), Ngay = dtpNgay.DateTime });
                if (dtNocu != null && dt.Rows.Count > 0)
                {
                    txtNocu.EditValue = dtNocu.Rows[0]["Conno"].ToInt32();
                }
                else txtNocu.EditValue = 0;
            }
        }

        int Gia = 0;

        private void gleHanghoa_EditValueChanged(object sender, EventArgs e)
        {
            if (gleHanghoa.Text != "" || gleHanghoa.EditValue != null)
            {
                DataRow[] x = dtChitietPhieunhap.Select(String.Format("Id_Hanghoa ='{0}'", gleHanghoa.EditValue));
                if (x.Length == 0)
                {
                    try
                    {
                        Load_Dvt(gleHanghoa.EditValue.GetGuid());
                        gleDvt.EditValue = gvHanghoa.GetFocusedRowCellValue("Id_Dvt0").GetGuid();
                        txtSoluong.EditValue = (float)0;
                        txtGianhap.EditValue = gvHanghoa.GetFocusedRowCellValue("Gianhap").ToInt32();
                        Gia = txtGianhap.EditValue.ToInt32() / gvDvt.GetFocusedRowCellValue("Doi").ToInt32();
                        txtCK.EditValue = gvHanghoa.GetFocusedRowCellValue("CK").ToInt32();

                        decimal Tongtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
                        Tongtien -= (Tongtien / 100) * txtCK.EditValue.ToInt32();
                        txtThanhtien.EditValue = Tongtien;
                    }
                    catch (Exception)
                    {
                        MsgC.MsgWarning("Vui lòng chọn lại hàng hóa");
                    }
                }
                else
                {
                    MsgC.MsgWarning("Hàng hóa đã được thêm vào rồi");
                }
            }
            else
            {
                gleDvt.EditValue = null;
                txtSoluong.EditValue = 0;
                txtGianhap.EditValue = 0;
                txtCK.EditValue = 0;
                txtThanhtien.EditValue = 0;
                gleHanghoa.Focus();
            }
        }

        private void txtSoluong_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                decimal Thanhtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
                Thanhtien -= (Thanhtien / 100) * txtCK.EditValue.ToInt32();
                txtThanhtien.EditValue = Thanhtien;
            }
            catch (Exception)
            {
            }
        }

        private void txtDongia_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                decimal Tongtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
                Tongtien -= (Tongtien / 100) * txtCK.EditValue.ToInt32();
                txtThanhtien.EditValue = Tongtien;
            }
            catch (Exception)
            {
            }
        }

        private void txtCK_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                decimal Tongtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
                Tongtien -= (Tongtien / 100) * txtCK.EditValue.ToInt32();
                txtThanhtien.EditValue = Tongtien;
            }
            catch (Exception)
            {
            }
        }

        private void gleDvt_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                txtGianhap.EditValue = gvDvt.GetFocusedRowCellValue("Doi").ToDecimal() * Gia;
                decimal Tongtien = txtSoluong.EditValue.ToDecimal() * txtGianhap.EditValue.ToDecimal();
                Tongtien -= (Tongtien / 100) * txtCK.EditValue.ToInt32();
                txtThanhtien.EditValue = Tongtien;
            }
            catch (Exception)
            {
            }
        }

        private void txtDongia_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            try
            {
                Gia = txtGianhap.EditValue.ToInt32() / gvDvt.GetFocusedRowCellValue("Doi").ToInt32();
            }
            catch (Exception)
            {
            }
        }

        private void gleNCC_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                Load_NCC("0");
            }
        }

        private void gleHanghoa_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                Load_Hanghoa_ForView();
            }
        }

        private void gvChitietPhieunhap_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString();
            }
        }

        private void txtSoluong_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Return")
            {
                if (KiemtraThemChitiet())
                {
                    ThemvaodtChitietPhieunhap();
                }
            }
        }

        private void txtGianhap_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Return")
            {
                if (KiemtraThemChitiet())
                {
                    ThemvaodtChitietPhieunhap();
                }
            }
        }

        private void txtCK_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Return")
            {
                if (KiemtraThemChitiet())
                {
                    ThemvaodtChitietPhieunhap();
                }
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (dtpNgay.Text.Trim() == "")
            {
                MsgC.MsgWarning("Chưa chọn ngày lập phiếu");
                dtpNgay.Focus();
                return;
            }
            if (gleNCC.Text.Trim() == "")
            {
                MsgC.MsgWarning("Chưa chọn nhà cung cấp");
                gleNCC.Focus();
                return;
            }
            if (lokNhanvien.Text.Trim() == "")
            {
                MsgC.MsgWarning("Chưa chọn nhân viên nhập hàng");
                lokNhanvien.Focus();
                return;
            }
            if (lokKho.Text.Trim() == "")
            {
                MsgC.MsgWarning("Chưa chọn nhập hàng vào kho nào");
                lokKho.Focus();
                return;
            }
            Phieunhap_BLL._sqlMapper.BeginTransaction();
            DAL.Entities.Phieunhap pn = new Phieunhap();
            try
            {
                ChitietPhieunhapBLL ChitietPhieunhap_BLL = new ChitietPhieunhapBLL();
                pn.Id = Guid.NewGuid();
                pn.Ma = Phieunhap_BLL.Phieunhap_Taoma(String.Format("pn{0:0#}{1:0#}{2}", DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year));
                pn.Ngay = dtpNgay.DateTime;
                pn.Id_Nhanvien = MAIN.Id;
                pn.Id_NhanvienNhap = lokNhanvien.EditValue.GetGuid();
                pn.Id_Trangthaiphieu = new Guid("a864d689-7c31-4bf4-b009-0405cfadef98");
                pn.Id_NCC = gleNCC.EditValue.GetGuid();
                pn.Tongtien = txtTongtien.EditValue.ToInt32();
                pn.Datra = 0;
                pn.Conno = pn.Tongtien;
                pn.Id_Kho = lokKho.EditValue.GetGuid();
                pn.Ghichu = txtGhichu.Text.ToUpperFirst();

                if (!Phieunhap_BLL.Phieunhap_Insert(pn))
                {
                    Phieunhap_BLL._sqlMapper.RollBackTransaction();
                    MsgC.MsgWarning("Thêm phiếu nhập không thành công\n\n Kiểm tra lại thông tin phiếu nhập");
                    return;
                }

                int CountRow = gvChitietPhieunhap.DataRowCount;
                for (int i = 0; i < CountRow; i++)
                {
                    DataRow dr = gvChitietPhieunhap.GetDataRow(i);
                    ChitietPhieunhap ctpn = new ChitietPhieunhap();
                    ctpn.Id = Guid.NewGuid();
                    ctpn.Id_Phieunhap = pn.Id;
                    ctpn.Id_Hanghoa = dr["Id_Hanghoa"].GetGuid();
                    ctpn.Soluong = (float)dr["Soluong"].ToDecimal();
                    ctpn.Id_Dvt = dr["Id_Dvt"].GetGuid();
                    ctpn.Doi = (float)dr["Doi"].ToDecimal();
                    ctpn.Gianhap = dr["Gianhap"].ToInt32();
                    ctpn.CK = dr["CK"].ToInt32();
                    ctpn.E = true;
                    if (!ChitietPhieunhap_BLL.ChitietPhieunhap_Insert(ctpn))
                    {
                        Phieunhap_BLL._sqlMapper.RollBackTransaction();
                        MsgC.MsgWarning("Thêm phiếu nhập không thành công\n\n Kiểm tra lại thông tin phiếu nhập");
                        return;
                    }

                    var hh = new Hanghoa();
                    hh.Id = ctpn.Id_Hanghoa;
                    hh.Soluong = ctpn.Soluong * ctpn.Doi;
                    hh.Gianhap = (int)(ctpn.Gianhap / ctpn.Doi);
                    if (!Hanghoa_BLL.Hanghoa_Update_SoluongGianhap(hh))
                    {
                        Phieunhap_BLL._sqlMapper.RollBackTransaction();
                        MsgC.MsgWarning("Thêm phiếu nhập không thành công\n\n Kiểm tra lại thông tin phiếu nhập");
                        return;
                    }
                }
                Phieunhap_BLL._sqlMapper.CommitTransaction();

                Load_DSPhieunhap();
                Load_ThongtinCaPhieunhap(pn.Id);
                Load_ChitietPhieunhap(pn.Id);
                Id_Phieunhap = pn.Id;

                ReadOnlyControl(true);
                EnabledControlHanghoa(true);
            }
            catch (Exception)
            {
                Phieunhap_BLL._sqlMapper.RollBackTransaction();
                MsgC.MsgWarning("Thêm phiếu nhập không thành công\n\n Kiểm tra lại thông tin phiếu nhập");
            }
        }

        private void gleNCC0_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                Load_DSPhieunhap();
            }
        }

        private void Load_DSPhieunhap()
        {
            DateTime x = dtpDenngay.DateTime;
            x = new DateTime(x.Year, x.Month, x.Day, x.Hour + 1, x.Minute, x.Second, x.Millisecond, x.Kind);
            if (gleNCC0.Text.Trim() == "")
            {
                Load_PhieunhapParameter(dtpTungay.DateTime, x);
            }
            else
                Load_PhieunhapParameter(dtpTungay.DateTime, x, gleNCC0.EditValue.GetGuid());
        }

        Guid Id_Phieunhap = Guid.Empty;

        private void gvDanhsach_DoubleClick(object sender, EventArgs e)
        {
            Id_Phieunhap = gvDanhsach.GetFocusedRowCellValue("Id").GetGuid();

            if (Id_Phieunhap != Guid.Empty)
            {
                EnabledControlHanghoa(false);
                Load_ThongtinCaPhieunhap(Id_Phieunhap);
                Load_ChitietPhieunhap(Id_Phieunhap);
            }
        }

        private void txtTongtien_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                txtTongtienchu.EditValue = txtTongtien.EditValue.ToString().ToVietnamese().ToUpperFirst() + " đồng.";
            }
            catch (Exception)
            {
            }
        }

        private void btnTratien_Click(object sender, EventArgs e)
        {
            BR.frmTratienPhieunhap frm = new frmTratienPhieunhap(Id_Phieunhap);
            frm.MyEvent_LoadData_Load_DSPhieu_Thongtinphie += new MyEvent_LoadData(frm_MyEvent_LoadData_Load_DSPhieu_Thongtinphie);
            frm.ShowDialog();
        }

        void frm_MyEvent_LoadData_Load_DSPhieu_Thongtinphie(object sender, ELoadData e)
        {
            if (e.IsLoadData)
            {
                Load_DSPhieunhap();
                Load_ThongtinCaPhieunhap(Id_Phieunhap);
            }
        }

        private void btnXoaM_Click(object sender, EventArgs e)
        {
            if (txtTrangthaiphieu.Text == "Chưa lưu...")
            {
                DataRow dr = gvChitietPhieunhap.GetFocusedDataRow();
                dr.Delete();
                gvChitietPhieunhap.UpdateCurrentRow();
                TinhTongtienPhieunhap();
            }
            else
            {
                if (txtTrangthaiphieu.Text == "Chưa thanh toán")
                {
                    if (DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có chắc muốn xóa mặt hàng này không", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        DataRow dr = gvChitietPhieunhap.GetFocusedDataRow();
                        //Cập nhật kho hàng
                        var hh = new Hanghoa();
                        ChitietPhieunhap_BLL._sqlMapper.BeginTransaction();
                        hh.Id = dr["Id_Hanghoa"].GetGuid();
                        hh.Soluong = -(float)(dr["Soluong"].ToDecimal() * dr["Doi"].ToDecimal());
                        hh.Gianhap = (int)(dr["Gianhap"].ToInt32() / dr["Doi"].ToDecimal());
                        if (!Hanghoa_BLL.Hanghoa_Update_SoluongGianhap(hh))
                        {
                            ChitietPhieunhap_BLL._sqlMapper.RollBackTransaction();
                            MsgC.MsgWarning("Không thể xóa! Lỗi kết nối đến CSDL");
                            return;
                        }

                        //Xóa chi tiết
                        if (!ChitietPhieunhap_BLL.ChitietPhieunhap_Delete(dr["Id"].GetGuid()))
                        {
                            ChitietPhieunhap_BLL._sqlMapper.RollBackTransaction();
                            MsgC.MsgWarning("Không thể xóa! Lỗi kết nối đến CSDL");
                            return;
                        }
                        Phieunhap pn = new Phieunhap();
                        pn.Tongtien = txtTongtien.EditValue.ToInt32() - dr["Thanhtien"].ToInt32();
                        //Xóa hiển thị
                        dr.Delete();
                        gvChitietPhieunhap.UpdateCurrentRow();

                        //Cập nhật lại thông tin phiếu
                        
                        pn.Id = Id_Phieunhap;
                        
                        pn.Datra = 0;
                        pn.Conno = pn.Tongtien;
                        if (pn.Tongtien == 0)
                        {
                            pn.Id_Trangthaiphieu = new Guid("a864d689-7c31-4bf4-b009-0405cfadef99");
                        }
                        else pn.Id_Trangthaiphieu = new Guid("a864d689-7c31-4bf4-b009-0405cfadef98");
                        if (!Phieunhap_BLL.Phieunhap_CapnhatTratien(pn))
                        {
                            ChitietPhieunhap_BLL._sqlMapper.RollBackTransaction();
                            MsgC.MsgWarning("Không thể xóa! Lỗi kết nối đến CSDL");
                            return;
                        }
                        //Ok xóa xong rầu
                        ChitietPhieunhap_BLL._sqlMapper.CommitTransaction();
                        Load_DSPhieunhap();
                        Load_ThongtinCaPhieunhap(Id_Phieunhap);
                        Load_ChitietPhieunhap(Id_Phieunhap);
                    }
                }
                else
                {
                    MsgC.MsgWarning("Phiếu nhập này đã đươc thanh toán hoặc không có mặt hàng nào.\n\nBạn không thể xóa.\nCó thể bạn đang muốn trả lại hàng cho NHÀ CUNG CẤP\nHãy dùng chức năng trả lại hàng");
                }
            }
        }

        private void gvChitietPhieunhap_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            try
            {
                if (e.Column.Name=="colSoluong" ||e.Column.Name=="colCK" || e.Column.Name=="colGianhap")
                {
                    DataRow dr = gvChitietPhieunhap.GetFocusedDataRow();
                    decimal x = dr["Soluong"].ToDecimal() * dr["Gianhap"].ToDecimal();
                    int y = dr["Ck"].ToInt32();
                    x -= (x / 100) * y;
                    gvChitietPhieunhap.SetFocusedRowCellValue(colThanhtien, x);
                    gvChitietPhieunhap.UpdateCurrentRow();
                }
            }
            catch (Exception)
            {
            }
        }

        private void btnXoaPhieunhap_Click(object sender, EventArgs e)
        {
            if (gvDanhsach.GetFocusedRowCellValue("Tongtien").ToInt32() == 0)
            {
                Guid Id = gvDanhsach.GetFocusedRowCellValue("Id").GetGuid();
                if (Id!=Guid.Empty)
                {
                    if (Phieunhap_BLL.Phieunhap_Delete(Id))
                    {
                        Load_DSPhieunhap();
                        if (Id == Id_Phieunhap)
                        {
                            btnPhieunhapmoi_Click(null, null);
                        }
                    }
                }
            }
            else
                MsgC.MsgWarning("Phiếu nhập này đang có mặt hàng nên bạn không thể xóa\n\nĐể xóa được bạn hãy xóa hết các mặt hàng chi tiết bên trong");
        }

        private void btnTraTien1_Click(object sender, EventArgs e)
        {
            BR.frmTratienPhieunhap frm = new frmTratienPhieunhap(gvDanhsach.GetFocusedRowCellValue("Id").GetGuid());
            frm.MyEvent_LoadData_Load_DSPhieu_Thongtinphie += new MyEvent_LoadData(frm_MyEvent_LoadData_Load_DSPhieu_Thongtinphie);
            frm.ShowDialog();
        }

        private void gleHanghoa_Click(object sender, EventArgs e)
        {
            gleHanghoa.SelectAll();
        }
    }
}
